Linux Swap 空间调整
在 Linux 系统中减少 swap 空间有两种主要场景:
- 减少现有的 swap 分区大小(需要调整分区并可能涉及数据迁移)。
- 减少现有的 swap 文件大小(更灵活,无需调整分区)。
以下是两种方法的详细步骤。根据你的系统使用的是 swap 分区还是 swap 文件,选择合适的方法。如果不确定,可以先检查当前 swap 配置。
检查当前 Swap 配置
运行以下命令查看当前的 swap 使用情况:
swapon --show
- 输出示例(swap 文件):
NAME TYPE SIZE USED PRIO /swapfile file 2G 0B -2
- 输出示例(swap 分区):
NAME TYPE SIZE USED PRIO /dev/sda5 partition 2G 0B -2
用 free -h
查看 swap 使用量:
total used free shared buff/cache available
Swap: 2.0Gi 0.0Gi 2.0Gi
方法 1:减少 Swap 文件大小
如果你的 swap 是一个文件(如 /swapfile
),减少大小相对简单。
步骤
-
关闭当前的 swap 文件:
sudo swapoff /swapfile
- 如果提示设备忙碌,检查占用 swap 的进程:
然后终止相关进程或重启系统。sudo lsof | grep swap
- 如果提示设备忙碌,检查占用 swap 的进程:
-
删除旧的 swap 文件:
sudo rm /swapfile
-
创建新的、更小的 swap 文件(例如从 2GB 减少到 1GB):
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
bs=1M
:块大小 1MB。count=1024
:块数,1024 * 1MB = 1GB。
-
设置文件权限:
sudo chmod 600 /swapfile
-
格式化为 swap:
sudo mkswap /swapfile
-
启用新的 swap 文件:
sudo swapon /swapfile
-
验证:
swapon --show free -h
- 预期输出:
NAME TYPE SIZE USED PRIO /swapfile file 1G 0B -2
- 预期输出:
-
确保开机自动挂载(可选):
- 编辑
/etc/fstab
,确保 swap 条目正确:sudo nano /etc/fstab
- 检查或添加:
/swapfile none swap sw 0 0
- 保存并退出。
- 检查或添加:
- 编辑
方法 2:减少 Swap 分区大小
如果你的 swap 是一个分区(如 /dev/sda5
),减少大小需要调整分区表,可能涉及数据备份和分区工具(如 gparted
)。
步骤
-
关闭当前的 swap 分区:
sudo swapoff /dev/sda5
- 替换
/dev/sda5
为你的实际 swap 分区(从swapon --show
获取)。
- 替换
-
备份数据(如果需要):
- 如果 swap 分区旁边有其他分区需要调整,确保备份重要数据。
-
使用分区工具调整大小:
- 安装
gparted
:sudo apt-get install gparted
- 启动
gparted
:sudo gparted
- 找到 swap 分区(标记为
linux-swap
),右键选择“关闭”。 - 缩小分区大小(例如从 2GB 调整到 1GB)。
- 应用更改。
- 安装
-
重新格式化为 swap:
- 获取调整后的分区设备名(例如仍为
/dev/sda5
):sudo mkswap /dev/sda5
- 获取调整后的分区设备名(例如仍为
-
启用新的 swap 分区:
sudo swapon /dev/sda5
-
验证:
swapon --show free -h
- 预期输出:
NAME TYPE SIZE USED PRIO /dev/sda5 partition 1G 0B -2
- 预期输出:
-
更新
/etc/fstab
:- 检查
/etc/fstab
中的 swap 条目:sudo nano /etc/fstab
- 示例:
/dev/sda5 none swap sw 0 0
- 确保设备名匹配新分区。
- 示例:
- 检查
注意事项
-
Swap 使用中:
- 如果 swap 正在使用,
swapoff
可能失败。可以临时增加物理内存使用(例如运行大程序)释放 swap,或者重启系统。
- 如果 swap 正在使用,
-
最小 Swap 大小:
- Swap 太小可能影响系统稳定性,尤其是内存不足时。建议至少保留 512MB 或根据内存大小设置(例如 RAM 的 1/2)。
-
分区调整风险:
- 调整分区可能导致数据丢失,建议在调整前备份。
-
性能影响:
- 减少 swap 后,如果内存不足,系统可能更频繁地触发 OOM Killer。
示例:从 2GB 减少到 1GB
假设当前是 swap 文件:
# 检查当前大小
swapon --show
# 输出:/swapfile file 2G
# 关闭 swap
sudo swapoff /swapfile
# 删除旧文件
sudo rm /swapfile
# 创建 1GB 新文件
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 验证
swapon --show
# 输出:/swapfile file 1G
删除 Swap(可选)
如果你想完全移除 swap:
sudo swapoff -a
sudo rm /swapfile # 如果是文件
# 或 sudo mkfs.ext4 /dev/sda5 # 如果是分区,转为其他文件系统
sudo sed -i '/swap/d' /etc/fstab # 从 fstab 中移除 swap 条目
如果不确定当前是文件还是分区,或者需要更具体指导,请提供 swapon --show
的输出,我会进一步协助你!